package com.geoway.adf.report.excel.sheet;

import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.geoway.adf.report.excel.alternatecoler.Alternate;
import com.geoway.adf.report.excel.alternatecoler.Format;
import com.geoway.adf.report.excel.conditionformat.ConditionFormat;
import com.geoway.adf.report.excel.image.Image;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.Accessors;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author: lzw
 * @Date: 2024/1/17 15:22
 * @Description:
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@ToString
@JsonInclude(JsonInclude.Include.ALWAYS)
public class Sheet {
    /**
     * 默认值：""
     * 作用：工作表索引，作为唯一key值使用，新增工作表时会自动赋值一个随机字符串。注意index不是工作表顺序，和order区分开。
     */
    private String index;

    /**
     * 默认值："Sheet1"
     * 作用：工作表名称
     */
    private String name="sheet1";

    /**
     * 默认值："##f20e0e"
     * 作用：工作表颜色,工作表名称下方会有一条底部边框
     */
    private String color="##f20e0e";

    /**
     * 默认值：1
     * 作用： 激活状态，仅有一个激活状态的工作表，其他工作表为 0
     */
    private Byte status=1;

    /**
     * 默认值：0
     * 作用： 工作表的下标，代表工作表在底部sheet栏展示的顺序，新增工作表时会递增，从0开始
     */
    private Byte order=0;

    /**
     * 默认值：0
     * 作用： 是否隐藏，0为不隐藏，1为隐藏
     */
    private Byte hide=0;

    /**
     * 默认值：36
     * 作用： 单元格行数
     */
    private Integer row=36;

    /**
     * 默认值：18
     * 作用： 单元格列数
     */
    private Integer column=18;

    /**
     * 默认值：19
     * 作用： 自定义的默认行高，单位为px
     */
    private Integer defaultRowHeight=19;

    /**
     * 默认值：73
     * 作用： 自定义的默认列宽，单位为px
     */
    private Integer defaultColWidth=73;

    /**
     * 初始化数据
     */
    private List<InitCell> celldata=new ArrayList<>();

    /**
     * 工作表配置
     */
    private Config config;

    /**
     * 左右滚动条位置
     */
    private Integer scrollLeft=0;

    /**
     * 上下滚动条位置
     */
    private Integer scrollTop=0;

    /**
     * 选中的区域
     */
    private List<Range> luckysheet_select_save;
    /**
     * 公式链
     */
    private List<Calculate> calcChain;
    /**
     * 是否数据透视表
     */
    private String isPivotTable;
    /**
     * 数据透视表设置
     */
    private PivotTable pivotTable;
    /**
     * 筛选范围
     */
    private Range filter_select;

    /**
     * 筛选配置
     */
    private Filter filter;

    /**
     * 交替颜色
     */
    private List<Alternate> luckysheet_alternateformat_save;
    /**
     * 自定义交替颜色
     */
    private List<Format> luckysheet_alternateformat_save_modelCustom;
    /**
     * 条件格式
     */
    private List<ConditionFormat> luckysheet_conditionformat_save;
    /**
     * 冻结行列配置
     */
    private Frozen frozen;
    /**
     * 图表配置
     */
    private JSONArray chart;

    /**
     * 缩放比例
     */
    private Float zoomRatio;

    /**
     * 图片
     */
    private List<Image> image;
    /**
     * 默认值：1
     * 作用：是否显示网格线，1表示显示，0表示隐藏
     */
    private Byte showGridLines = 1;
    /**
     * 数据验证配置
     */
    private JSONObject dataVerification;

    /**
     * 默认[]
     * 所有行的位置信息,调试用，初始化时无需设置
     */
    private List<Integer> visibledatarow;
    /**
     * 默认[]
     * 所有列的位置信息,调试用，初始化时无需设置
     */
    private List<Integer> visibledatacolumn;

    /**
     * 默认值：2322
     * 作用： 整个工作表区域的宽度(包含边界的灰色区域)，初始化无需设置
     */
    private Integer ch_width;

    /**
     * 默认值：2322
     * 作用： 整个工作表区域的高度(包含边界的灰色区域)，初始化无需设置
     */
    private Integer rh_height;
    /**
     * 默认值：0
     * 当前sheet是否加载过，内部标识，初始化无需设置
     */
    private Byte load=0;

    /**
     * 默认值：[]
     * 作用： 初始化时从celldata转换而来，后续操作表格的数据更新，会更新到这个data字段中，初始化无需设置
     */
    private List<List<Cell>> data;

    private JSONObject indicator;
}
